﻿// *********************************************************
//
// Copyright © Microsoft Corporation
//
// Licensed under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0 
//
// THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES
// OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED,
// INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES
// OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY OR NON-INFRINGEMENT.
//
// See the Apache 2 License for the specific language
// governing permissions and limitations under the License.
//
// *********************************************************

using System;
using System.Runtime.Serialization;

namespace Roslyn.Samples.CodeAction.CopyPasteWithUsing
{
    internal class Contract
    {
        internal static void ThrowIfNull<T>(T obj) where T : class
        {
            if (obj == null)
            {
                throw new UnexpectedNullException();
            }
        }

        internal static void ThrowIfNull<T>(T obj, string message) where T : class
        {
            if (obj == null)
            {
                throw new UnexpectedNullException(message);
            }
        }

        [Serializable]
        internal class UnexpectedNullException : Exception
        {
            public UnexpectedNullException()
            {
            }

            public UnexpectedNullException(string message) :
                base(message)
            {
            }

            public UnexpectedNullException(string message, Exception innerException) :
                base(message, innerException)
            {
            }

            public UnexpectedNullException(SerializationInfo info, StreamingContext context) :
                base(info, context)
            {
            }
        }
    }
}
